In [19]:
%install_ext https://raw.githubusercontent.com/joelkim/ipython-tikzmagic/master/tikzmagic.py


Installed tikzmagic.py. To use it, type:
  %load_ext tikzmagic

In [21]:
%load_ext tikzmagic

분산과 표준편차

샘플 자료의 분포나 확률 분포를 묘사하는 가장 대표적인 값은 평균 혹은 기댓값이다. 이에 대한 자세한 내용은 다음 노트북을 참조한다.

[[school_notebook:dd6a7633d69f401bb00409b9ae8806e8]]

이와 함께 많이 쓰이는 대표값은 분산(variance) 또는 표준편차(standard deviation)이다. 평균이나 기댓값이 분포의 모양에서 위치를 대표하는 것이라면 분산은 분포의 폭(width)을 대표하는 값이다. 표준 편차는 분산에 대한 양의 제곱근(square root)값이다.

$$ \text{표준 편차} = \sqrt{\text{분산}} $$

분산도 평균과 마찬가지로 자료 값 집합에 대한 샘플 분산과 확률 분포에 대한 분산을 정의할 수 있다.

샘플 분산

샘플 분산은 주어진 자료 값의 집합에서 다음과 같은 식으로 구한다. 식에서 $x_i$는 $N$개의 자료 중 $i$번재의 자료를 나타내고 $m$은 샘플 평균이다.

$$ s^2 = \dfrac{1}{N}\sum_{i=1}^{N} (x_i-m)^2 $$

In [146]:
%%tikz -p pgfplots,pgffor -s 600,300
\begin{axis}[hide axis, width=400pt, height=200pt, line width=2pt, ymax=0.25]
\addplot[domain=-1:4,samples=100]{exp(-(x-0)^2 / (2^2)) / (2 * sqrt(2*pi))};
\foreach \x in {-0.7, -0.5, -0.35, -0.21, -0.11, 0, 0.14, 0.19, 0.3, 0.5, 0.8, 1.0, 1.5, 1.9, 2.4} {
  \edef\temp{\noexpand\fill (axis cs:\x, 0.02) circle (3pt);}\temp
}
\node at (axis cs:0,0.23) {$m$};
\draw[line width=1pt, dashed](axis cs:0,-0.1) -- (axis cs:0,0.22);
\node at (axis cs:1,0.11) {$x_i$};
\draw[line width=1pt, dashed](axis cs:1,-0.1) -- (axis cs:1,0.1);
\draw[line width=1pt, <->](axis cs:0,0.05) -- (axis cs:1,0.05);
\end{axis}


위의 그림에서 볼 수 있듯이 이 식은 자료값과 평균 사이의 거리를 의미한다. 다만 자료값이 평균보다 작을 때는 음수가 나오므로 제곱을 하여 모두 양수로 만들어 준 것이다.

위 식에서 구한 샘플 분산은 정확하게 말하면 편향 오차를 가진 편향 샘플 분산(biased sample variance)이다. 이와 대조되는 비편향 샘플 분산은 다음과 같이 구한다.

$$ s^2_{\text{unbiased}} = \dfrac{1}{N-1}\sum_{i=1}^{N} (x_i-m)^2 $$

샘플 분산의 편향 오차에 대해서는 확률 분포의 분산과 같이 이후에 다룬다.

확률 분포의 분산

확률 분포는 확률 밀도 함수 $f(x)$로 분포 전체의 모양을 정확하게 정의할 수 있으므로 다음과 같이 이론적인 분산을 구할 수 있다.

분산을 구하는 연산자는 영어 Variance를 따서 $\text{Var}[\cdot]$로 표기하고 분산은 $\sigma^2$으로 표기한다.

$$ \sigma^2 = \text{Var}[X] = \text{E}[(X - \mu)^2] = \int_{-\infty}^{\infty} (x - \mu)^2 f(x)dx$$

이산 확률 변수의 경우에는 다음과 같이 확률 질량 함수를 사용하여 분산을 구한다.

$$ \sigma^2 = \sum (x - \mu)^2 f(x)$$

분산의 성질

분산은 다음과 같은 성질을 만족한다.

  • 0 또는 양수 $$ \text{Var}[X] \geq 0 $$

  • 랜덤 변수가 아닌 고정된 값 $c$에 대해 $$ \text{Var}[c] = 0 $$ $$ \text{Var}[cX] = c^2 \text{Var}[X] $$

또한 기댓값의 성질을 이용하여 다음 성질을 증명할 수 있다.

$$ \text{Var}[X] = \text{E}[X^2] - (\text{E}[X])^2 = \text{E}[X^2] - \mu^2$$

(증명)

$$ \begin{eqnarray} \text{Var}[X] &=& \text{E}[(X - \mu)^2] \\ &=& \text{E}[X^2 - 2\mu X + \mu^2] \\ &=& \text{E}[X^2] - 2\mu\text{E}[X] + \mu^2 \\ &=& \text{E}[X^2] - 2\mu^2 + \mu^2 \\ &=& \text{E}[X^2] - \mu^2\\ \end{eqnarray} $$

샘플 평균의 분산

확률 변수 $X$의 샘플 평균 $\bar{X}$도 일종의 확률 변수이고 그 기댓값 $\text{E}[\bar{X}]$은 원래 확률 변수 $X$의 기댓값 $\text{E}[{X}]$과 일치한다는 것을 아래의 노트북에서 증명한 적이 있다.

$$ \text{E}[\bar{X}] = \text{E}[{X}]$$

[[school_notebook:dd6a7633d69f401bb00409b9ae8806e8]]

그럼 샘플 평균$\bar{X}$의 분산 $\text{Var}[\bar{X}]$은 원래 확률 변수 $X$의 분산 $\text{Var}[{X}]$과 어떤 관계가 있을까?

우선 개별 샘플에 대한 확률 변수 $X_i$가 서로 독립이라고 가정하자

$$ \text{E}\left[ (X_i-\mu)(X_j-\mu) \right] = 0 \;\; \text{ if i $\neq$ j} $$

또한 개별 샘플에 대한 확률 변수 $X_i$의 기댓값과 분산은 원래 확률 변수 $X$와 같다.

두 분산 사이에는 다음과 같은 관계가 있음을 증명할 수 있다.

$$ \begin{eqnarray} \text{Var}[\bar{X}] &=& \text{Var} \left[ \dfrac{1}{N} \sum_{i=1}^N X_i \right] \\ &=& \text{E} \left[ \left( \dfrac{1}{N} \sum_{i=1}^N X_i - \mu \right)^2 \right] \\ &=& \text{E} \left[ \left( \dfrac{1}{N} \sum_{i=1}^N (X_i - \mu) \right)^2 \right] \\ &=& \text{E} \left[ \dfrac{1}{N^2} \sum_{i=1}^N \sum_{j=1}^N (X_i - \mu) (X_j - \mu) \right] \\ &=& \text{E} \left[ \dfrac{1}{N^2} \sum_{i=1}^N (X_i - \mu)^2 \right] \\ &=& \text{E} \left[ \dfrac{1}{N} (X - \mu)^2 \right] \\ &=& \dfrac{1}{N} \text{Var}[X] = \dfrac{\sigma^2}{N} \end{eqnarray} $$

확률 변수의 독립에 관한 내용은 다음 노트북을 참조한다.

[[school_notebook:e08074f293144eeca9cc7251b5d5666c]]

샘플 분산 $s^2$의 기대값을 구하면 다음과 같이 이론적인 분산 $\sigma^2$의 $\dfrac{N - 1}{N}$ 배임을 알 수 있다.

$$ \begin{eqnarray} \text{E}[s^2] &=& \text{E} \left[ \dfrac{1}{N}\sum_{i=1}^N (X_i - \bar{X})^2 \right] = \text{E} \left[ \dfrac{1}{N}\sum_{i=1}^N \left\{ (X_i -\mu) - (\bar{X} - \mu) \right \}^2 \right] \\ &=& \text{E} \left[ \dfrac{1}{N}\sum_{i=1}^N \left\{ (X_i -\mu)^2 - 2 (X_i -\mu)(\bar{X} - \mu) + (\bar{X} - \mu)^2 \right \} \right] \\ &=& \text{E} \left[ \dfrac{1}{N} \sum_{i=1}^N (X_i -\mu)^2 \right] - 2 \text{E} \left[ { \dfrac{1}{N} \sum_{i=1}^N (X_i -\mu)(\bar{X} - \mu) } \right] + \text{E} \left[ { \dfrac{1}{N} \sum_{i=1}^N (\bar{X} - \mu)^2 } \right] \end{eqnarray} $$

이 때 $$ \text{E} \left[ \dfrac{1}{N} \sum_{i=1}^N (X_i -\mu)^2 \right] = \text{Var}[X] = \sigma^2 $$

$$ \begin{eqnarray} \text{E} \left[ { \dfrac{1}{N} \sum_{i=1}^N (X_i -\mu)(\bar{X} - \mu) } \right] &=& \text{E} \left[ { \dfrac{1}{N} \sum_{i=1}^N (X_i -\mu) \left( \dfrac{1}{N} \sum_{j=1}^N X_j - \mu \right) } \right] \\ &=& \text{E} \left[ { \dfrac{1}{N} \sum_{i=1}^N (X_i -\mu) \left( \dfrac{1}{N} \sum_{j=1}^N ( X_j - \mu ) \right) } \right] \\ &=& \text{E} \left[ { \dfrac{1}{N^2} \sum_{i=1}^N \sum_{j=1}^N (X_i -\mu) ( X_j - \mu )} \right] \\ &=& \dfrac{1}{N} \text{Var}[X] = \dfrac{\sigma^2}{N} \end{eqnarray} $$$$ \text{E} \left[ { \dfrac{1}{N} \sum_{i=1}^N (\bar{X} - \mu)^2 } \right] = \dfrac{1}{N} \text{Var}[X] = \dfrac{\sigma^2}{N} $$

따라서

$$ \text{E}[s^2] = \sigma^2 - \dfrac{2\sigma^2}{N} + \dfrac{\sigma^2}{N} = \dfrac{N-1}{N}\sigma^2 $$

따라서 샘플 분산의 기대값이 정확하게 $\sigma^2$이 되려면 분모가 $N$이 아니라 $N-1$이 되어야 한다.

$$ \sigma^2 = \dfrac{N}{N-1} \text{E}[s^2] = \dfrac{N}{N-1} \text{E} \left[ \dfrac{1}{N} \sum (X_i-\bar{X})^2 \right] = \text{E} \left[ \dfrac{1}{N-1} \sum (X_i-\bar{X})^2 \right] = \text{E} \left[ s^2_{\text{unbiased}} \right] $$

Python을 사용한 계산

Python에서 샘플 분산과 샘플 표준 편차는 numpy의 다음 함수들을 사용한다.


In [157]:
sp.random.seed(0)
x = sp.stats.norm(0, 2).rvs(1000)  # mean=0, standard deviation=2

In [158]:
np.var(x)


Out[158]:
3.8969378252486169

In [160]:
np.var(x, ddof=1)  # unbiased variance


Out[160]:
3.9008386639125292